PROC(5) | Linux Programmer's Manual | PROC(5) |
名前¶
proc - プロセスの情報を含む擬似ファイルシステム
説明¶
proc ファイルシステムは擬似的なファイルシステムであり、 カーネル内のデータへのインターフェースとして使用される。 一般的には /proc にマウントされる。 大部分のファイルは読み出し専用 (read-only) であるが、 いくつかのファイルは書き込み可能であり、 そのファイルに書き込めばカーネルの内部変数を変更できる。
以下は /proc 階層の簡単なあらましである。
- /proc/[pid]
- 実行中のプロセスについてのサブディレクトリ。 サブディレクトリ名は (そのプロセスの) プロセス ID である。 各サブディレクトリは、以下の擬似ファイルとディレクトリを含む。
- /proc/[number]/auxv (カーネル 2.6.0-test7 以降)
- 実行時にプロセスに渡された ELF インタプリタ情報が格納されている。 個々のエントリは、unsigned long 型の ID 1 個に unsigned long 型の値 1 個が続くフォーマットである。 最後のエントリには 0 が 2 個入っている。
- /proc/[pid]/cmdline
- プロセスの完全なコマンド行を保持する。 ただし、そのプロセスがゾンビプロセスの場合は、このファイルは空となる。 つまり、このファイルを読み出しても一文字も返らない。 このファイルではコマンドライン引き数が、 ヌル文字で区切られた文字列として書かれており、 最後の文字列の後にヌルバイト ('\0') が一つ置かれる。
- /proc/[pid]/coredump_filter (kernel 2.6.23 以降)
- core(5) 参照。
- /proc/[pid]/cpuset (kernel 2.6.12 以降)
- cpuset(7) 参照。
- /proc/[pid]/cwd
- プロセスのカレントワーキングディレクトリへのシンボリックリンク。
例えば、プロセス 20
のカレントワーキングディレクトリを見つけるためには、
次のようにすればよい。
$ cd /proc/20/cwd; /bin/pwd
pwd コマンドはシェルの内部コマンドのことがよくあり、 うまく動作しないかもしれない。 bash(1) では pwd -P を使ってもよい。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、 このシンボリックリンクの内容は参照できない (スレッドの終了は通常 pthread_exit(3) を呼び出しにより行われる)。
- /proc/[pid]/environ
- このファイルはプロセスの環境変数を含んでいる。
各エントリは NULL
バイト ('\0')
で区切られていて、
末尾に NULL
バイトがあるかもしれない。
したがって、プロセス
1
の環境変数を表示するためには
次のようにすればよい。
$ (cat /proc/1/environ; echo) | tr '\000' '\n'
- /proc/[pid]/exe
- Linux 2.2
以降では、このファイルはシンボリックリンクで、
実行可能コマンドの実際のパス名を格納している。
このシンボリックリンクは通常のように辿ることができる;
これをオープンすると実行可能ファイルがオープンされる。
(コマンドラインで)
/proc/[pid]/exe
と入力すると、プロセス番号
[pid] で実行されている
実行可能ファイルをもう一つ実行することができる。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、
このシンボリックリンクの内容は参照できない
(スレッドの終了は通常
pthread_exit(3)
を呼び出しにより行われる)。
Linux 2.0 以前では、 /proc/[pid]/exe は実行されたバイナリへのポインタで、シンボリックリンクのように見える。 Linux 2.0 以前では、このファイルに対して readlink(2) を実行すると、
[デバイス番号]:iノード番号というフォーマットの文字列が返る。
たとえば、[0301]:1502 はメジャーデバイス番号 03 (IDE, MFM などのドライブ) マイナーデバイス番号 01 (最初のドライブの最初のパーティション) の デバイス上の iノード番号 1502 である。
-inum オプションをつけて find(1) を使うと、このファイルの所在を探すことができる。
- /proc/[pid]/fd
- プロセスがオープンしたファイル各々に対するエントリを含むサブディレクトリ。
ファイルディスクリプタがファイル名で、
実際のファイルへのシンボリックリンクになっている。
したがって 0
は標準入力、1
は標準出力、2
は標準エラー出力、などとなる。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、 このディレクトリの内容は参照できない (スレッドの終了は通常 pthread_exit(3) を呼び出しにより行われる)。
コマンドライン引き数としてファイル名を受け取るが、引き数が 渡されなかった場合に標準入力から入力を受け取らないようなプログラムや、 コマンドライン引き数として書き込みファイルを受け取るが、引き数が 渡されなかった場合に標準出力に出力を行わないようなプログラムであっても、 /proc/[pid]/fd を使うことで標準入力や標準出力を使用できるようになる。 例えば、 -i を入力ファイルを指定するフラグ、 -o を出力ファイルを指定するフラグと仮定すると、以下のコマンドを 実行することにより、フィルタとして動作させることができる。
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
/proc/self/fd/N は、ある種の Unix や Unix 風のシステムにある /dev/fd/N とだいたい同じである。 事実 Linux のたいていの MAKEDEV スクリプトは、 /dev/fd を /proc/self/fd へのシンボリックリンクにしている。
ほとんどのシステムでは、シンボリックリンク /dev/stdin, /dev/stdout, /dev/stderr が提供されており、それぞれ /proc/self/fd 内のファイル 0, 1, 2 にリンクされている。 したがって、上述のサンプルコマンドは次のようにも書くことができる。
$ foobar -i /dev/stdin -o /dev/stdout ...
- /proc/[pid]/fdinfo/ (kernel 2.6.22 以降)
- このサブディレクトリには、そのプロセスがオープンしているファイル毎の
エントリが入っており、ファイルディスクリプタがファイル名となっている。
各ファイルの内容を読み出すことで、対応するファイルディスクリプタに関する
情報を得ることができる。以下に例を示す。
$ cat /proc/12015/fdinfo/4 pos: 1000 flags: 01002002
pos フィールドは 10 進数で、現在のファイルオフセットを示す。 flags フィールドは 8 進数で、 ファイルのアクセスモードとファイル状態フラグを示す (open(2) 参照)。
このディレクトリのファイルは、プロセスの所有者だけが読み出すことができる。
- /proc/[pid]/limits (kernel 2.6.24 以降)
- このファイルは、そのプロセスの各リソース制限について、 ソフト・リミット、ハード・リミット、計測単位を表示する (getrlimit(2) 参照)。 このファイルは、プロセスの実 UID を持つものだけが読み出すことができる。
- /proc/[pid]/maps
- 現在マップされているメモリ領域とそのアクセスパーミッションを含む。
フォーマットは以下のとおり:
address perms offset dev inode pathname 08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm 08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm 08058000-0805b000 rwxp 00000000 00:00 0 40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so 40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so 4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so 40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so 4013e000-40142000 rw-p 00000000 00:00 0 bffff000-c0000000 rwxp 00000000 00:00 0
ここで "address" はプロセスのアドレス空間でそのメモリ領域が占めている アドレスで、"perms" はパーミッションのセットである。
r = read w = write x = execute s = shared p = private (copy on write)
"offset" はファイル (などの) 中でのオフセット、 "dev" はデバイス (メジャーデバイス番号:マイナーデバイス番号)、 "inode" はそのデバイスの i ノード番号である。 これが 0 のときは、bss (初期化されていないデータ領域) の場合のように このメモリ領域にはどの i ノードも割り当てられていないことを意味している。
Linux 2.0 ではパス名を書いたフィールドがない。
- /proc/[pid]/mem
- このファイルは、 open(2), read(2), lseek(2) を通して、プロセスのメモリのページにアクセスするために使われる。
- /proc/[pid]/mountinfo (Linux 2.6.26 以降)
- このファイルには、マウントポイントについての情報が入っている。
以下のような形式の行から構成される。
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
- 括弧付きの数字は、以下の説明のためのものである。
- (1)
- マウント ID: マウントの一意な識別子 (umount(2) の後は再利用されるかもしれない)。
- (2)
- parent ID: 親マウントの ID (マウントツリーの最上位の場合は自分自身の ID となる)。
- (3)
- major:minor: ファイルシステム上のファイルの st_dev の値 (stat(2) 参照)。
- (4)
- ルート: そのファイルシステム内のマウントのルート。
- (5)
- マウントポイント: マウントポイントのそのプロセスのルートからの相対パス。
- (6)
- マウントオプション: 各マウントのオプション。
- (7)
- オプションフィールド: "tag[:value]" 形式のフィールドが 0 個以上並ぶ。
- (8)
- セパレータ: オプションフィールドの終わりを示す。
- (9)
- ファイルシステム種別: ファイルシステムの名前。 "type[.subtype]" という形式となる。
- (10)
- マウント元: ファイルシステム固有の情報。ない場合は "none" となる。
- (11)
- super options: スーパーブロック単位のオプション。
- 解釈する側は認識できないオプションフィールドは全て無視すべきである。 現在のところ、オプションフィールドとしては以下のようなものがある。
- マウントはピアグループ (peer group) X で共有されている。
- master:X
- マウントはピアグループ (peer group) X のスレーブである。
- propagate_from:X
- マウントはスレーブであり、ピアグループ X (*) から mount propagation を受信する。
- unbindable
- マウントは unbind できない。
- (*) X は、プロセスの root
で直近の dominant peer group
である。 X
がマウントの直接のマスターである場合や、
同じ root に dominant peer group
がない場合は、
"master:X"
フィールドだけが存在し、
"propagate_from:X"
フィールドは存在しない。
mount propagation の詳細については、カーネルソースツリー内の Documentation/filesystems/sharedsubtree.txt を参照。
- /proc/[pid]/mounts (Linux 2.4.19 以降)
- そのプロセスのマウント名前空間に現在マウントされている 全ファイルシステムのリスト。 このファイルのフォーマットは fstab(5) に載っている。 カーネル 2.6.15 以降では、このファイルを監視することができる (pollable)。 このファイルを読み出し用にオープンした後で、このファイルに変更があると (つまりファイルシステムのマウントやアンマウントがあると)、 select(2) ではそのファイルディスクリプタは読み出し可能となり、 poll(2) と epoll_wait(2) ではそのファイルはエラー状態として通知される。
- /proc/[pid]/mountstats (Linux 2.6.17 以降)
- このファイルを通じて、そのプロセスの名前空間内のマウントポイントに関する
各種情報
(統計、設定情報)
を参照できる。
ファイルの各行は以下のフォーマットである。
device /dev/sda7 mounted on /home with fstype ext3 [statistics] ( 1 ) ( 2 ) (3 ) (4)
- 各行のフィールドは以下の通りである。
- (1)
- マウントされているデバイス名 (対応するデバイスがない場合は "nodevice" となる)。
- (2)
- マウントポイントのファイルシステムツリーにおけるパス名。
- (3)
- ファイルシステム種別。
- (4)
- 追加の統計や設定情報。 現在のところ (Linux 2.6.26 時点では)、 このフィールドで情報が提供されているのは NFS ファイルシステムだけである。
- このファイルはプロセスの所有者だけが読み出すことができる。
- /proc/[pid]/numa_maps (Linux 2.6.14 以降)
- numa(7) を参照。
- /proc/[pid]/oom_adj (Linux 2.6.11 以降)
- このファイルは、メモリ不足 (OOM) の状況下で どのプロセスを殺すべきかを選択するのに使用されるスコアを 調整するのに使用される。 カーネルは、プロセスの oom_score 値のビットシフト操作に、この値を使用する。 この値として有効な値は -16 から +15 までと、 特別な意味を持つ -17 である。 -17 はそのプロセスに対する OOM-killing を完全に無効にすることを意味する。 正の値ほど、そのプロセスが OOM-killer により殺される可能性が高くなり、 負の値ほど可能性が低くなる。 このファイルのデフォルト値は 0 である。 新しいプロセスは親プロセスの oom_adj の設定を継承する。 このファイルを変更するためには、プロセスは特権 (CAP_SYS_RESOURCE) を持っていなければならない。
- /proc/[pid]/oom_score (Linux 2.6.11 以降)
- このファイルは、OOM-killer のプロセス選択用として、カーネルが このプロセスに対して与えた現在のスコアを表示する。 高いスコアは、そのプロセスが OOM-killer により選択される 可能性が高いことを意味する。 このスコアの基本はそのプロセスが使用しているメモリ量であり、 以下の要因により加算 (+) 減算 (-) が行われる。
- そのプロセスが多くの子プロセスを fork(2) を使って作成しているか (+)。
- そのプロセスが長時間実行されて来たか、もしくは 多くの CPU 時間を使用しているか (-)。
- そのプロセスが低い nice 値 (> 0) を持っているか (+)。
- そのプロセスが特権を持っているか (-)。
- そのプロセスが direct hardware access を行っているか (-)。
- oom_score は、そのプロセスの oom_adj 設定で規定されるビットシフト調整にも影響を与える。
- /proc/[pid]/root
- Unix と Linux では、
ファイルシステムのルート
(/)
をプロセスごとに別々にできる。
これはシステムコール
chroot(2)
によって設定する。
このファイルはプロセスのルートディレクトリを指すシンボリックリンクで、
exe や fd/*
などと同じような動作をする。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、 このシンボリックリンクの内容は参照できない (スレッドの終了は通常 pthread_exit(3) を呼び出しにより行われる)。
- /proc/[pid]/smaps (Linux 2.6.14 以降)
- このファイルは、そのプロセスの各マッピングのメモリ消費量を表示する。
マッピングのそれぞれについて、以下のような内容が表示される。
08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash Size: 464 kB Rss: 424 kB Shared_Clean: 424 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB
最初の行には、 /proc/[pid]/maps で表示されるマッピングと同じ情報が表示される。 残りの行には、マッピングのサイズ、現在 RAM 上に存在するマッピングの量、 マッピング内の共有ページのうちクリーンなページ数、ダーティなページ数、 マッピング内のプライベートページのうちクリーンなページ数、 ダーティなページ数、を示す。このファイルが存在するのは、カーネルのコンフィギュレーション・オプション CONFIG_MMU を有効にした場合だけである。
- /proc/[pid]/stat
- プロセスの状態についての情報。
これは ps(1)
で使われ、
/usr/src/linux/fs/proc/array.c
で定義されている。
各フィールドを順番に、 scanf(3) のフォーマット指定子付きで以下に示す。
- pid %d
- プロセス ID。
- comm %s
- 括弧でくくられた実行形式のファイル名。 実行形式がスワップアウトされているかどうかによらず、見ることができる。
- state %c
- "RSDZTW" のどれか 1 文字。 R は実行中 (running)、 S は割り込み可能な休眠状態 (sleeping in an interruptible wait)、 D は割り込み不可能なディスクスリープの待機状態 (waiting in uninterruptible disk sleep)、 Z はゾンビ状態 (zombie)、 T はトレースされている (traced) か (シグナルにより) 停止している状態 (stopped)、 W はページング中 (paging) を表している。
- ppid %d
- 親プロセスの PID。
- pgrp %d
- プロセスのプロセスグループ ID。
- session %d
- プロセスのセッション ID。
- tty_nr %d
- プロセスの制御端末 (マイナー・デバイス番号はビット 31〜20 と 7〜0 にまたがって格納され、 メジャー・デバイス番号はビット 15〜8 に格納される)。
- tpgid %d
- プロセスの制御端末のフォアグランド・プロセス・グループの ID。
- flags %u (Linux 2.6.22 より前は %lu)
- プロセスのカーネルフラグワード。 ビットの意味は、 <linux/sched.h> で定義されている PF_* を参照すること。 詳細はカーネルのバージョンに依存する。
- minflt %lu
- プロセスが引き起こしたマイナーフォールト (minor fault、ディスクから メモリページへのロードを必要としないフォールト) の回数。
- cminflt %lu
- (そのプロセスが終了を待っている) 子プロセスが引き起こしたマイナーフォールトの回数。
- majflt %lu
- プロセスが引き起こしたメジャーフォールト (major fault、ディスクから メモリページへのロードを必要とするフォールト) の回数。
- cmajflt %lu
- (そのプロセスが終了を待っている) 子プロセスが引き起こしたメジャーフォールトの回数。
- utime %lu
- このプロセスがユーザーモードでスケジューリングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。 この値にはゲスト時間 guest_time (仮想 CPU の実行に消費された時間) も含まれる。これは、ゲスト時間のフィールドを認識しないアプリケーション において、ゲスト時間分を計算に入れ損ねないようにするためである。
- stime %lu
- プロセスのカーネルモードでの実行時間 (単位 jiffies)。 このプロセスがカーネルモードでスケジューリングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。
- cutime %ld
- このプロセスの子プロセスで、終了待ち (waited-for) のプロセスが、 ユーザモードでスケジューリングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。 (times(2) も参照すること。) この値にはゲスト時間 cguest_time (仮想 CPU を実行するのに消費した時間、下記参照) も含まれる。
- cstime %ld
- このプロセスの子プロセスで、終了待ち (waited-for) のプロセスが、 カーネルモードでスケジューリングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。
- priority %ld
- (Linux 2.6 の場合の説明)
リアルタイム・スケジューリングポリシー
(下記の policy ; sched_setscheduler(2)
参照)
で動作しているプロセスでは、
この値はスケジューリング優先度を反転した値
(スケジューリング優先度を
マイナスにした値)
となる。値は -2 から -100
までの範囲の数値で、
それぞれリアルタイム優先度の
1 から 9 に対応する。
リアルタイム以外のスケジューリングポリシーで動作しているプロセスでは、
この値はカーネル内で管理されている
nice 値そのもの (setpriority(2))
となる。 カーネルは
nice 値を 0 (高) から 39 (低)
の範囲の値として保持しており、
それぞれユーザに見える
nice 値の -20 から 19
に対応する。
Linux 2.6 より前では、このプロセスに割り当てられたスケジューリング 重みを変換した値が表示されていた。
- nice %ld
- nice 値 (setpriority(2) 参照)。 19 (最低優先) から -20 (最高優先) の範囲の値である。
- num_threads %ld
- このプロセスのスレッド数 (Linux 2.6 以降)。 カーネル 2.6 より前では、このフィールドは削除されたフィールドの 場所埋めとして 0 にハードコードされていた。
- itrealvalue %ld
- インターバルタイマによって、次に SIGALRM がプロセスへ送られるまでの時間 (単位 jiffies)。 カーネル 2.6.17 以降では、このフィールドはメンテナンスされなくなり、 0 にハードコードされている。
- starttime %llu (Linux 2.6 より前は %lu)
- プロセスの起動時刻。システムが起動した時刻が起点 (単位 jiffies)。
- vsize %lu
- 仮想メモリのサイズ。単位はバイト。
- rss %ld
- Resident Set Size。プロセスが持っている実メモリ上のページ数。 これはちょうどテキスト、データ、スタック空間に使われているページ数である。 デマンドロードされていないページや スワップアウトされたページの数は含んでいない。
- rsslim %lu
- このプロセスの rss の現在のソフト・リミット (バイト単位)。 getpriority(2) の RLIMIT_RSS の説明を参照。
- startcode %lu
- プログラムテキストが実行可能であるような領域の先頭アドレス。
- endcode %lu
- プログラムテキストが実行可能であるような領域の末尾アドレス。
- startstack %lu
- スタックの開始アドレス (すなわち、スタックの底)。
- kstkesp %lu
- 現在の ESP (スタックポインタ) の値。 プロセスのカーネルスタックページにある。
- kstkeip %lu
- 現在の EIP (インストラクションポインタ) の値。
- signal %lu
- 処理待ちのシグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止予定である。 リアルタイム・シグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。
- blocked %lu
- ブロックされた (blocked) シグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止予定である。 リアルタイム・シグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。
- sigignore %lu
- 無視された (ignored) シグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止予定である。 リアルタイム・シグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。
- sigcatch %lu
- 捕捉された (caught) シグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止予定である。 リアルタイム・シグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。
- wchan %lu
- プロセスが待っている「チャネル」。 これはシステムコールのアドレスであり、文字名が必要ならば (アドレスとシステムコール名との) 対応表から見つけられる (もし /etc/psdatabase [訳注: このファイル名はパッケージによる] を更新しているならば、 ps -l して WCHAN フィールドを見よ)。
- nswap %lu
- スワップされたページ数 (メンテナンスされていない)。
- cnswap %lu
- 子プロセスの nswap の累計 (メンテナンスされていない)。
- exit_signal %d (Linux 2.1.22 以降)
- プロセスが死んだときに親プロセスに送られるシグナル。
- processor %d (Linux 2.2.8 以降)
- このプロセスを最後に実行した CPU の番号。
- rt_priority %u (Linux 2.5.19 以降; Linux 2.6.22 より前は %lu)
- リアルタイム・スケジューリングの優先度。 リアルタイム・ポリシーの元でスケジューリングされるプロセスでは 1 から 99 の範囲の値となり、 リアルタイム以外のスケジューリングポリシーのプロセスでは 0 となる (sched_setscheduler(2) 参照)。
- policy %u (Linux 2.5.19 以降; Linux 2.6.22 より前は %lu)
- スケジューリング・ポリシー (sched_setscheduler(2) 参照)。 値は、 linux/sched.h の SCHED_* 定数を使ってデコードすればよい。
- delayacct_blkio_ticks %llu (Linux 2.6.18 以降)
- (clock tick (100分の1秒) 単位での) ブロック I/O の総遅延量。
- guest_time %lu (Linux 2.6.24 以降)
- プロセスのゲスト時間 (ゲスト OS の仮想 CPU を実行するのに消費された時間)。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。
- cguest_time %ld (Linux 2.6.24 以降)
- プロセスの子プロセスのゲスト時間。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。
- /proc/[pid]/statm
- (ページ単位で計測した)
メモリ使用量についての情報を提供する。
各列は以下の通りである。
size プログラムサイズの総計
(/proc/[pid]/status の VmSize と同じ) resident 実メモリ上に存在するページ
(/proc/[pid]/status の VmRSS と同じ) share 共有ページ (共有マッピングされているページ) text テキスト (コード) lib ライブラリ (Linux 2.6 では未使用) data データ + スタック dt ダーティページ (Linux 2.6 では未使用)
- /proc/[pid]/status
- /proc/[pid]/stat と /proc/[pid]/statm
にある多くの情報を、人間が解析しやすい形式で提供する。
以下に例を示す。
$ cat /proc/$$/status Name: bash State: S (sleeping) Tgid: 3515 Pid: 3515 PPid: 3452 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 100 100 100 100 FDSize: 256 Groups: 16 33 100 VmPeak: 9136 kB VmSize: 7896 kB VmLck: 0 kB VmHWM: 7572 kB VmRSS: 6316 kB VmData: 5224 kB VmStk: 88 kB VmExe: 572 kB VmLib: 1708 kB VmPTE: 20 kB Threads: 1 SigQ: 0/3067 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000384004 SigCgt: 000000004b813efb CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: 00000001 Cpus_allowed_list: 0 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 150 nonvoluntary_ctxt_switches: 545
- フィールドの詳細は以下の通りである。
- Name: このプロセスにより実行されたコマンド。
- State: プロセスの現在の状態。 "R (running; 実行中)", "S (sleeping; 休眠状態)", "D (disk sleep; ディスク待ちの休眠状態)", "T (stopped; 停止状態)", "T (tracing stop; トレースによる停止)", "Z (zombie; ゾンビ状態)", "X (dead; 死亡)" のいずれかである。
- Tgid: スレッドグループ ID (すなわち、プロセス ID)。
- Pid: スレッド ID (gettid(2) 参照)。
- TracerPid: このプロセスをトレースしているプロセスの PID (トレースされていない場合は 0)。
- Uid, Gid: 実 UID/GID、実効 UID/GID、保存 set-UID/GID、ファイルシステム UID/GID。
- FDSize: 現在割り当てられているファイルディスクリプタのスロット数。
- Groups: 補助グループのリスト。
- VmPeak: 仮想メモリサイズのピーク値。
- VmSize: 仮想メモリサイズ。
- VmLck: ロックされているメモリサイズ。
- VmHWM: 実メモリ上に存在するページサイズ (resident set size) のピーク値 ("high water mark")。
- VmRSS: 実メモリ上に存在するページサイズ。
- VmData, VmStk, VmExe: データ、スタック、テキストセグメントのサイズ。
- VmLib: 共有ライブラリ・コードのサイズ。
- VmPTE: ページ・テーブル・エントリのサイズ (Linux 2.6.10 以降)。
- Threads: このスレッドが属するプロセスのスレッド数。
- SigPnd, ShdPnd: スレッド宛およびプロセス全体宛の処理待ちシグナルの数 (pthreads(7), signal(7) 参照)。
- SigBlk, SigIgn, SigCgt: ブロックされるシグナル、無視されるシグナル、捕捉待ちのシグナルを 示すマスク値 (signal(7))。
- CapInh, CapPrm, CapEff: 継承可能 (inheritable)、許可 (permitted)、実効 (effective) の各ケーパビリティセットで有効になっているケーパビリティのマスク値 (capabilities(7) 参照)。
- CapBnd: ケーパビリティ・バウンディングセット (カーネル 2.6.26 以降、 capabilities(7) 参照)。
- Cpus_allowed: このプロセスが実行を許可されている CPU のマスク値 (Linux 2.6.24 以降、 cpuset(7) 参照)。
- Cpus_allowed_list: 前項と同じだが、「リスト形式」での表示 (Linux 2.6.26 以降、 cpuset(7) 参照)。
- Mems_allowed: このプロセスが使用できるメモリノードのマスク値 (Linux 2.6.24 以降、 cpuset(7) 参照)。
- Mems_allowed_list: 前項と同じだが、「リスト形式」での表示 (Linux 2.6.26 以降、 cpuset(7) 参照)。
- voluntary_context_switches, nonvoluntary_context_switches: 自発的/非自発的なコンテキストスイッチの回数 (Linux 2.6.23 以降)。
- /proc/[pid]/task (Linux 2.6.0-test6 以降)
- このディレクトリには、そのプロセスのスレッド情報を含む
サブディレクトリが 1
スレッドにつき 1
つ置かれる。
各サブディレクトリの名前はスレッドのスレッド
ID ([tid])
を示す数字である
(gettid(2) を参照)。
これらの各サブディレクトリには、
/proc/[pid]
ディレクトリ以下と同じ名前と内容のファイル群がある。
すべてのスレッドで共有される属性の場合、
task/[tid]
サブディレクトリ以下の各ファイルの内容は
親ディレクトリ
/proc/[pid]
の対応するファイルと同じになることだろう
(例えば、マルチスレッド・プロセスではファイル
task/[tid]/cwd
はいずれも親ディレクトリ内の
/proc/[pid]/cwd
と同じ値を持つことになる。なぜなら、一つのプロセスに属すすべての
スレッドは作業ディレクトリを共有するからである)。
スレッド毎に独立な属性の場合、
task/[tid]
サブディレクトリ以下の各ファイルは異なる値を持つことがある
(例えば、ファイル
task/[tid]/status
はスレッド毎に異なる値を持つ可能性がある)。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、 /proc/[pid]/task ディレクトリの内容は参照できない (スレッドの終了は通常 pthread_exit(3) を呼び出しにより行われる)。
- /proc/apm
- Advanced Power Management のバージョンとバッテリ情報。 カーネルのコンパイル時に CONFIG_APM を定義したときに存在する。
- /proc/bus
- インストールされている各バス用にサブディレクトリがある。
- /proc/bus/pccard
- PCMCIA デバイスの情報が書かれるサブディレクトリ。 カーネルのコンパイル時に CONFIG_PCMCIA を定義したときに存在する。
- /proc/bus/pccard/drivers
- /proc/bus/pci
- いくつかのサブディレクトリがあり、 PCI バス・インストールされているデバイス・ デバイスドライバの情報が書かれた仮想ファイルがある。 これらのファイルのうちいくつかは ASCII フォーマットではない。
- /proc/bus/pci/devices
- PCI デバイスの情報。 lspci(8) や setpci(8) でアクセスすることができる。
- /proc/cmdline
- ブート時に Linux カーネルに渡された引き数。 引き数の受け渡しは、たいてい lilo(8) や grub(8) といったブートマネージャを使って行われる。
- /proc/config.gz (Linux 2.6 以降)
- このファイルでは、現在実行中のカーネルの構築時に使用された
設定オプションを参照できる。
書式は、 (make xconfig, make config
などを使って)
カーネルの設定を変更した際に生成される
.config
ファイルのものと同じである。
ファイルの内容は圧縮されており、
zcat(1), zgrep(1)
などを使うと、表示や検索ができる。
ファイルが変更されていない限り、
/proc/config.gz
の内容は次のコマンドで得られる内容と同じである。
cat /lib/modules/$(uname -r)/build/.config
- /proc/config.gz が提供されるのは、カーネルの設定で CONFIG_IKCONFIG_PROC が有効になっている場合のみである。
- /proc/cpuinfo
- このファイルは、CPU およびシステムアーキテクチャに依存する項目を 集めたもので、リストの内容はサポートされているアーキテクチャ毎に異なる。 2 つだけ共通の項目がある。 processor はプロセッサ番号で、 bogomips はカーネルの初期化時に計算されるシステム定数である。 SMP マシンでは各 CPU についての情報が書かれている。
- /proc/devices
- メジャーデバイス番号とデバイスグループのテキスト形式のリスト。 MAKEDEV スクリプトはこのファイルを使って、 カーネルとの整合性を保つことができる。
- /proc/diskstats (Linux 2.5.69 以降)
- このファイルには各ディスクデバイスのディスク I/O 統計情報が書かれている。 更に詳しい情報は、カーネルソースファイル Documentation/iostats.txt を参照すること。
- /proc/dma
- 登録されている ISA DMA (direct memory access) チャネルのリスト。
- /proc/driver
- 空のサブディレクトリ。
- /proc/execdomains
- 実行ドメインのリスト (ABI パーソナリティ)。
- /proc/fb
- カーネルのコンパイル時に CONFIG_FB が定義されている場合、フレームバッファの情報が書かれる。
- /proc/filesystems
- カーネルが対応しているファイルシステムのテキスト形式のリスト。
カーネルに組み込まれてコンパイルされたファイルシステムと、
カーネルモジュールが現在ロードされているファイルシステムが列挙される
(filesystems(5) 参照)。
ファイルシステムに
"nodev"
という印が付いている場合、
そのファイルシステムがマウントするためのブロックデバイスを
必要としないことを意味する
(例えば、
仮想ファイルシステム、ネットワークファイルシステムなど)。
ちなみに、マウント時にファイルシステムが指定されず、 どうやってもファイルシステムの種類を判定できなかった際に、 このファイルを mount(8) が使用するかもしれない。 その場合、このファイルに含まれるファイルシステムが試される (ただし、"nodev" の印がついたものは除く)。
- /proc/fs
- 空のサブディレクトリ。
- /proc/ide
- このディレクトリは
IDE
バスをもつシステムに存在する。
各 IDE
チャネルとそれに取り付けられている各デバイスごとにディレクトリがあり、
以下のファイルが含まれている。
cache バッファサイズ (KB) capacity セクタ数 driver ドライバのバージョン geometry 物理ジオメトリと論理ジオメトリ identify 16 進数表記 media メディアのタイプ model 製造者のモデル番号 settings ドライブの設定 smart_thresholds 16 進数表記 smart_values 16 進数表記
hdparm(8) ユーティリティは、分かりやすい形式で この情報にアクセスするための手段を提供する。
- /proc/interrupts
- IO デバイス毎の CPU 別の割り込み回数の記録に使われる。 Linux 2.6.24 以降、少なくとも i386 と x86_64 アーキテクチャでは、 (デバイスと関連がない) システム内部の割り込みについても記録される。 システム内部の割り込みには、NMI (nonmaskable interrupt), LOC (local timer interrupt) や、SMP システムでは TLB (TLB flush interrupt), RES (rescheduling interrupt), CAL (remote function call interrupt) などがある。 簡単に読むことのできるフォーマットで、ASCII で表記されている。
- /proc/iomem
- Linux 2.4 における I/O メモリマップ。
- /proc/ioports
- 現在登録され使われている I/O ポート領域のリスト。
- /proc/kallsyms (Linux 2.5.71 以降)
- カーネルの外部シンボル定義を保持する。 modules(X) 関係のツールがローダブルモジュールを動的にリンクしたり バインド (bind) するのに使われる。 Linux 2.5.47 以前では、微妙に異なる書式の似たようなファイルが ksyms という名前であった。
- /proc/kcore
- このファイルはシステムの物理メモリを表現しており、
ELF コアファイル形式 (core
file format)
で保持されている。
この擬似ファイルと
strip
されていないカーネルのバイナリ
(/usr/src/linux/vmlinux) [訳注:
パッケージに依存する])
があれば、 GDB
はカーネル内の任意のデータ構造の現在の状態を調べられる。
このファイルの大きさは物理メモリ (RAM) のサイズに 4KB を加えた値である。
- /proc/kmsg
- このファイルは syslog(2)
システムコールでカーネルメッセージを読み出す代りに使える。
プロセスがこのファイルを読むためにはスーパーユーザー権限が必要であり、
ファイルを読み出すのは
1
つのプロセスのみに限るべきである。
カーネルメッセージを記録するために、
syslog(2)
システムコールの機能を使う
syslog
プロセスが稼働している場合、
このファイルを読み出すべきではない。
このファイルの中の情報は dmesg(8) によって表示される。
- /proc/ksyms (Linux 1.1.23-2.5.47)
- /proc/kallsyms を参照。
- /proc/loadavg
- このファイルの最初の 3 つのフィールドはロードアベレージの数値で、 1, 5, 15 分あたりの実行キュー内 (state R) または ディスク I/O 待ち (state D) のジョブ数を与える。 これは uptime(1) などのプログラムによって得られる値と同じである。 4 番目のフィールドはスラッシュ (/) で区切られた 2 つの数値から構成される。 この数値のうち最初のものは、現在実行されている カーネルスケジュールエンティティ (プロセス、スレッド) の数である。 この数値は CPU の数以下になる。 スラッシュの後の数値は、現在システム上に存在する カーネルスケジュールエンティティの数である。 5 番目のフィールドはシステム上に最も最近生成されたプロセスの PID である。
- /proc/locks
- このファイルは現在のファイルロック (flock(2) と fcntl(2)) とリース (fcntl(2)) を表示する。
- /proc/malloc (Linux 2.2 以前のみ)
- コンパイルのときに CONFIGDEBUGMALLOC が定義されているときのみ、このファイルは存在する。
- /proc/meminfo
- このファイルはシステム上のメモリ使用量に関する統計情報を表示する。 free(1) は、このファイルを参照し、 システムの未使用および使用中のメモリ量 (物理メモリとスワップ) と、 カーネルに使われている共有メモリとバッファの情報を報告する。
- /proc/modules
- 現在システムにロードされているモジュールのテキスト形式のリスト。 lsmod(8) も参照。
- /proc/mounts
- カーネル 2.4.19 より前では、このファイルは現在システムにマウントされている 全てのファイルシステムのリストであった。 Linux 2.4.19 でプロセス単位のマウント名前空間が導入されたことに伴い、 このファイルは /proc/self/mounts へのリンクとなった。 /proc/self/mounts はそのプロセス自身のマウント名前空間のマウントポイントのリストである。 このファイルのフォーマットは fstab(5) に記述されている。
- /proc/mtrr
- Memory Type Range Registers。 詳細は、カーネルソースファイル Documentation/mtrr.txt を参照すること。
- /proc/net
- さまざまなネットワークについての擬似ファイルで、 それぞれがネットワーク層の各種の状態を与える。 これらのファイルの内容は ASCII 形式なので、 cat(1) で読み出せる。 とはいえ基本コマンドの netstat(8) はこれらのファイルの内容のよりすっきりとした表示を提供する。
- /proc/net/arp
- アドレス解決に使われるカーネルの
ARP テーブルの ASCII
可読なダンプを保持している。
動的結合されたものと固定
(pre-programmed) の両方の APP
エントリを見ることができる。フォーマットは以下のとおり:
IP address HW type Flags HW address Mask Device 192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0 192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
ここで IP address はマシンの IPv4 アドレス、 HW type はそのアドレスの RFC 826 で定められているハードウェアの形式、 Flags は ARP 構造体 (/usr/include/linux/if_arp.h 内で定義されている) の内部フラグ、 HW address はその IP アドレスにマップされているデータリンク層のアドレス (もしわかっていれば) である。
- /proc/net/dev
- 擬似ファイル dev
はネットワークデバイスの状態情報を含んでいる。
これは送受信したパケット数、エラーとコリジョン
(collision) の回数、
その他の基本的な統計を与える。
これらは ifconfig(8)
がデバイスの状態を報告するのに使われる。
フォーマットは以下のとおり:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
- /proc/net/dev_mcast
- /usr/src/linux/net/core/dev_mcast.c
で定義されており、以下の形式である。
indx interface_name dmi_u dmi_g dmi_address 2 eth0 1 0 01005e000001 3 eth1 1 0 01005e000001 4 eth2 1 0 01005e000001
- /proc/net/igmp
- Internet Group Management Protocol (インターネットグループ管理プロトコル)。 /usr/src/linux/net/core/igmp.c で定義されている。
- /proc/net/rarp
- このファイルは arp と同じフォーマットで 逆アドレス解決サービス (reverse address lookup services) rarp(8) に提供するために使われる現在の逆マップデータベースの内容を含んでいる。 RARP がカーネルコンフィグレーションに設定されていなければ、 このファイルは存在しない。
- /proc/net/raw
- RAW ソケットテーブルのダンプを保持している。 ほとんどの情報はデバッグ以外では使われない。 "sl" の値はソケットのカーネルハッシュスロット、 "local_address" はローカルアドレスとプロトコル番号のペア [訳者追加: "rem_address" はリモートアドレスとプロトコル番号のペア]。 "st" はソケットの内部状態。 "tx_queue" と "rx_queue" はカーネルメモリを消費している 送信/受信データキューのサイズ。 "tr" と "tm->when" と "rexmits" フィールドは RAW では使われていない。 "uid" フィールドはソケット生成者の実効 UID を保持している。
- /proc/net/snmp
- このファイルは SNMP エージェントが必要とする IP, ICMP, TCP, UDP 管理情報を ASCII データとして保持している。
- /proc/net/tcp
- TCP ソケットテーブルのダンプを保持している。 大部分の情報はデバッグ以外には使われない。 sl はソケットのカーネルハッシュスロットの値、 "local_address" はローカルアドレスとポート番号のペアである。 (ソケットが接続している場合は) "rem_address" はリモートアドレスとポート番号の対である。 "st" はソケットの内部状態である。 "tx_queue" と "rx_queue" はカーネルメモリを消費している 送信/受信データキューのサイズ。 "tr" と "tm->when" と "rexmits" フィールドはソケット状態のカーネル 内部情報を保持しているが、これらはデバッグのときにしか役に立たない。 "uid" フィールドはソケット生成者の実効 UID を保持している。
- /proc/net/udp
- UDP
ソケットテーブルのダンプを保持している。
大部分の情報はデバッグ以外には使われない。
sl
はソケットのカーネルハッシュスロットの値、
"local_address"
はローカルアドレスとポート番号のペアである。
(ソケットが接続している場合は)
"rem_address"
はリモートアドレスとポート番号のペアである。
"st"
はソケットの内部状態である。
"tx_queue" と "rx_queue"
はカーネルメモリを消費している
送信/受信データキューのサイズ。
"tr" と "tm->when" と
"rexmits" フィールドは UDP
では使われていない。
"uid"
フィールドはソケット生成者の実効
UID を保持している。
フォーマットは以下のとおり:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid
1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- /proc/net/unix
- Unix
ドメインソケットのリスト。
フォーマットは以下のとおり:
Num RefCount Protocol Flags Type St Path
0: 00000002 00000000 00000000 0001 03
1: 00000001 00000000 00010000 0001 01 /dev/printerここで、Num はカーネルのテーブルスロット数、 RefCount はソケットを使用しているユーザー数、 Protocol はいまのところいつも 0 で、Flags はソケットの状態を保持している カーネル内部のフラグである。 Type はいまのところいつも 1 (UNIX ドメインのデータグラムソケットは、現在のカーネルではサポートされていない [訳注: 2.0.34 ではサポートされているようだ])。 St はソケットの内部状態で、Path は (もしあれば) ソケットのパス名である。
- /proc/partitions
- 各パーティションのメジャー番号とマイナー番号が書かれている。 さらに、ブロック数とパーティション名も書かれている。
- /proc/pci
- カーネルの初期化時に見つかったすべての
PCI
デバイスのリストと
その設定。
このファイルは非推奨であり、新しい PCI 用の /proc インターフェイス (/proc/bus/pci) を使うこと。 このファイルは Linux 2.2 でオプションになった (カーネルのコンパイル時に CONFIG_PCI_OLD_PROC をセットすると利用可能であった)。 Linux 2.4 で再びオプションなしで有効に戻った。 さらに、Linux 2.6 で非推奨となり (CONFIG_PCI_LEGACY_PROC をセットするとまだ利用可能であった)、 最終的に Linux 2.6.17 以降で完全に削除された。
- /proc/scsi
- scsi
中間レベル擬似ファイルといくつかの
SCSI
低レベルドライバの
ディレクトリを含むディレクトリ。
これらのファイルは
ASCII
で表現されているので
cat(1) で読める。
いくつかのファイルは書き込み可能で、サブシステムの設定を変更したり、 特定の機能をオン/オフすることができる。
- /proc/scsi/scsi
- カーネルが知っているすべての
SCSI
デバイスのリスト。
このリストは起動時に
(コンソールで)
見られるものとほぼ同じである。
scsi は現在のところ
add-single-device
コマンドのみをサポートしている。
これによりルート (root)
は既知のデバイスリストへ活線挿抜
(hotplugged)
デバイスを加えることができる。
次のコマンドを実行すると、
echo 'scsi add-single-device 1 0 5 0' > /proc/scsi/scsi
ホストアダプタ scsi1 は SCSI チャネル 0 で ID 5 LUN 0 のデバイスを探す。 もしこのアドレスに既知のデバイスがあるか、 不正なアドレスであったならばエラーが返る。 - /proc/scsi/[drivername]
- いまのところ [drivername]
は NCR53c7xx, aha152x, aha1542, aha1740, aic7xxx, buslogic,
eata_dma, eata_pio, fdomain, in2000, pas16, qlogic, scsi_debug, seagate,
t128, u15-24f, ultrastore, wd7000
のどれかである。
少なくとも 1 つの SCSI
ホストバスアダプタ
(HBA) に
ドライバが割り当てられていると、そのドライバに対応したディレクトリが現れる。
それぞれのディレクトリには、
登録されたホストアダプタに対応してファイルが作られる。
このファイルの名前は、システムの初期化の際に
ホストアダプタに割り当てられた番号になる。
これらのファイルを読めばドライバとホストアダプタの設定や 統計などを見ることができる。
これらのファイルへの書き込みはホストアダプタごとに異なる動作を引き起こす。 たとえば latency と nolatency コマンドを用いると、 ルート (root、スーパーユーザー) は eata_dma ドライバの隠し測定コードの オン/オフを切り替えることができる。 また lockup と unlock コマンドを用いると、ルートは scsi_debug ドライバがシミュレートするバスロックアップ (bus lockup) を 制御することができる。
- /proc/self
- このディレクトリはプロセスに (プロセス自身の) /proc ファイルシステムへのアクセスを参照させる。 これは /proc 内の (このプロセスの) プロセス ID が名前となっている ディレクトリと全く同一である。
- /proc/slabinfo
- Linux 2.6.16 以降では、
カーネル設定オプション
CONFIG_SLAB
が有効の場合にのみ、このファイルは存在する。
カーネルキャッシュの情報。
/proc/slabinfo
のフィールドは以下のとおり。
cache-name num-active-objs total-objs object-size num-active-slabs total-slabs num-pages-per-slab
詳細は slabinfo(5) を参照すること。
- /proc/stat
- カーネル/システムの統計。 アーキテクチャによって異なる。 共通エントリには以下のものが含まれる。
- cpu 3357 0 4313 1362393
- ユーザーモード、
低い優先度 (nice)
でのユーザーモード、
システムモード、
タスク待ち (idle task)、
でそれぞれシステムが消費した時間を
USER_HZ
を単位として計測した積算値。
(ほとんどのアーキテクチャでは
USER_HZ は 1/100 秒である。
正しい値は sysconf(_SC_CLK_TCK)
を使って取得できる。)
最後の値
(タスク待ち)
は疑似ファイル uptime の
2番目のエントリの値を
USER_HZ
倍したものである。
Linux 2.6 では、この行に 3つの欄が追加されている: iowait (I/O の完了を待っていた時間; 2.5.41 以降); irq (割り込み処理を行った時間; 2.6.0-test4 以降); softirq (ソフト割り込みの処理を行った時間; 2.6.0-test4 以降)。
Linux 2.6.11 以降では、8 個目の欄として steal (盗まれた時間; stolen time) が存在する。 これは、仮想化環境での動作時に他のオペレーティングシステムにより 消費された時間である。
Linux 2.6.24 以降では、9 個目の欄として、 guest がある。これは、 Linux カーネルの制御下のゲストオペレーティングシステムの仮想 CPU の 実行に消費された時間である。
- page 5741 1808
- システムが (ディスクから) ページイン/ページアウトしたページ数。
- swap 1 0
- スワップイン/スワップアウトされたページ数。
- intr 1462898
- この行はシステム起動時以降に処理された割り込みの回数を示す。 最初の欄は処理された割り込み全ての合計であり、それ以降の欄は 個々の割り込みについての合計数である。
- disk_io: (2,0):(31,30,5764,1,2) (3,0):...
- (メジャー番号,
ディスクインデックス番号):(情報なし
(noinfo), 読み込み回数,
読み込みブロック数,
書き出し回数,
書き出しブロック数)
(Linux 2.4 のみ) - ctxt 115315
- コンテクスト・スイッチの延べ回数。
- btime 769041601
- 起動時刻、紀元年 (epoch, 1970 年 1 月 1 日午前 0 時) からの秒数。
- processes 86031
- システム起動時からの延べフォーク (fork) 数。
- procs_running 6
- 実行中状態のプロセス数 (Linux 2.5.45 以降)。
- procs_blocked 2
- I/O 完了待ちで停止 (blocked) しているプロセス数 (Linux 2.5.45 以降)。
- /proc/swaps
- 使用中のスワップ領域。 swapon(8) も参照すること。
- /proc/sys
- このディレクトリ (1.3.57 以降に存在) はカーネル変数に対応するいくつかの ファイルとサブディレクトリを含む。 これらの変数は読み出し可能である。 また場合によっては /proc ファイルシステムや、 (非推奨の) システムコール sysctl(2) を用いて書き換えることもできる。 いまのところ abi, debug, dev, fs, kernel, net, proc, rxrpc, sunrpc, vm というサブディレクトリがあって、 それぞれがファイルとサブディレクトリを含んでいる。
- /proc/sys/abi (Linux 2.4.10 以降)
- このディレクトリにはアプリケーションのバイナリ情報が入ったファイルが置かれる。 更に詳しい情報は、カーネルソースファイル Documentation/sysctl/abi.txt を参照すること。
- /proc/sys/debug
- このディレクトリは空の場合もある。
- /proc/sys/dev
- このディレクトリにはデバイス特有の情報 (たとえば dev/cdrom/info) が含まれる。 このディレクトリが空になっているシステムもある。
- /proc/sys/fs
- このディレクトリには、サブディレクトリ binfmt_misc, epoll, inotify, mqueue と以下のファイルがある: dentry-state, dir-notify-enable, dquot-nr, file-max, file-nr, inode-max, inode-nr, inode-state, lease-break-time, leases-enable, overflowgid, overflowuid, suid_dumpable, super-max, super-nr.
- /proc/sys/fs/binfmt_misc
- このディレクトリ以下のファイルについてのドキュメントは、 カーネルソースの Documentation/binfmt_misc.txt にある。
- /proc/sys/fs/dentry-state (Linux 2.2 以降)
- このファイルには、ディレクトリキャッシュ (dcache) の状態に関する情報が 入っている。ファイルには、 nr_dentry, nr_unused, age_limit (秒単位の age), want_pages (システムがリクエストしたページ数), ダミーの 2 つの値、 という 6 つの数字が書かれている。
- nr_dentry は割り当てられた dentry (dcache エントリ) の数である。 このフィールドは Linux 2.2 では使用されない。
- nr_unused は未使用の dentry 数である。
- age_limit は、メモリが不足している場合に次に dcache entry を再要求できるように なるまでの残り時間 (秒数) である。
- want_pages は、カーネルが shrink_dcache_pages() を呼び出したが dcache がまだ縮小されていない場合に、0 以外の値となる。
- /proc/sys/fs/dir-notify-enable
- このファイルは fcntl(2) に記述されている dnotify インターフェースをシステム全体で無効にしたり有効にしたりする。 このファイルに値 0 が書かれている場合はインターフェースが無効になり、 値 1 の場合は有効になる。
- /proc/sys/fs/dquot-max
- このファイルにはキャッシュされるディスク quota エントリの最大数が書かれている。 (2.4 系の) システムの中には、このファイルが存在しないものもある。 キャッシュされるディスク quota エントリの空きが非常に少なく、 とても多くのシステムユーザーが同時に存在する場合、 この制限を上げるといいかもしれない。
- /proc/sys/fs/dquot-nr
- このファイルには割り当てられているディスク quota のエントリ数と、 空いているディスク quota のエントリ数が書かれている。
- /proc/sys/fs/epoll (Linux 2.6.28 以降)
- このディレクトリには、ファイル max_user_watches がある。 これらは、 epoll インタフェースが消費するカーネルメモリ量を制限するのに使用できる。 詳細は epoll(7) を参照。
- /proc/sys/fs/file-max
- このファイルはシステム全体でプロセスがオープンできる
ファイル数の上限を定義する。
(各プロセスがオープンできるファイル数の上限を
RLIMIT_NOFILE
によって設定する
setrlimit(2)
も参照すること。)
ファイルハンドルを使い果たして大量にエラーメッセージが出る場合は、
以下のようにしてこの値を増加させてみよ:
echo 100000 > /proc/sys/fs/file-max
file-max に書かれている値は、カーネル定数 NR_OPEN に制限される。
/proc/sys/fs/file-max を増やした場合は、 /proc/sys/fs/inode-max を新しい /proc/sys/fs/file-max の値の 3-4 倍に増やしておくこと。 こうしないと inode を使い果たしてしまうだろう。
- /proc/sys/fs/file-nr
- (このファイルは読み出し専用で) 読み出すと 現在オープンされているファイルの数が得られる。 このファイルには、割り当てられているファイルハンドル数・ 空いているファイルハンドル数・ファイルハンドル数の最大値、 という 3 つの数値が書かれている。 カーネルはファイルハンドルを動的に割り当てるが、 それを再び解放しない。 割り当てられているファイル数が最大値に近づいた場合は、 最大値を大きくすることを考慮すべきである。 空いているファイルハンドル数が多い場合は、 ファイルハンドルの使用のピークを経験したことがあり、 最大値を大きくする必要はないだろう。
- /proc/sys/fs/inode-max
- このファイルには、メモリ内 inode の最大値が書かれている。 (2.4 系の) システムによっては、このファイルが存在しないかもしれない。 この値は file-max の値の 3-4 倍にすべきである。 これは stdin, stdout, ネットワークソケットを扱うにも inode が必要なためである。 日常的に inode を使い果たしている場合は、この値を増やす必要がある。
- /proc/sys/fs/inode-nr
- このファイルには、 inode-state の最初の 2 つの値が書かれている。
- /proc/sys/fs/inode-state
- このファイルには 7 個の値が書かれている: nr_inodes, nr_free_inodes, preshrink と 4 つのダミーの値である。 nr_inodes はシステムが確保する inode の数である。 Linux は 1 度に 1 ページ分いっぱいに nr_inode を確保するので、この値が inode-max より幾分大きくなることもある。 nr_free_inodes は空いている inode の数を表す。 nr_inodes > inode-max の場合、 preshrink は 0 以外の値になる。 この場合システムは inode をさらに確保するのではなく、 inode リストを切り詰める必要がある。
- /proc/sys/fs/inotify (Linux 2.6.13 以降)
- このディレクトリには、ファイル max_queued_events, max_user_instances, and max_user_watches がある。これらは、 inotify インタフェースが消費するカーネルメモリ量を制限するのに利用できる。 詳細は inotify(7) を参照。
- /proc/sys/fs/lease-break-time
- このファイルは、ファイルを保持しているプロセスに対して カーネルがシグナルを送り、 他のプロセスがそのファイルをオープンするのを待っていることを通知してから、 そのプロセスに対してカーネルがファイルのリース (lease, 貸し出し) (fcntl(2) を参照) を許す猶予期間を指定する。 リースホルダ (lease holder: ファイルの貸し出しを受けているプロセス) が 猶予期間中にリースを削除するか階級を低くしない場合、 カーネルはファイルのリースを強制的に止める。
- /proc/sys/fs/leases-enable
- このファイルはシステム全体でのファイルリース (fcntl(2) を参照) を有効または無効にする。 ファイルに値 0 が書き込まれている場合、リースは無効である。 0 以外の場合にはリースは有効である。
- /proc/sys/fs/mqueue (Linux 2.6.6 以降)
- このディレクトリにはファイル msg_max, msgsize_max, and queues_max がある。これらは POSIX メッセージキューで使用されるリソースの 制御を行う。 詳細は mq_overview(7) を参照。
- /proc/sys/fs/overflowgid と /proc/sys/fs/overflowuid
- これらのファイルにより、ユーザーは固定 UID と固定 GID の値を変更できる。 デフォルトは 65534 である。 Linux の UID と GID は 32 ビットであるが、 16 ビットの UID と GID しかサポートしないファイルシステムもある。 このようなファイルシステムが書き込みを許可してマウントされた場合、 65535 を超える UID と GID は、 ディスクに書き込まれる前にオーバーフロー値に変換される。
- /proc/sys/fs/suid_dumpable (Linux 2.6.13 以降)
- このファイルの値により、set-user-ID
されたバイナリや、
保護がかかった (protected)
バイナリ / tainted な
(汚染された;
ライセンスがカーネルと適合しない)
バイナリに対して、コアダンプファイルを
生成するかどうかが決定される。
以下の
3つの値を指定することができる:
0 (default) この値を指定すると、以前と同じ (Linux 2.6.13 より前の) 動作をする。 (seteuid(2), setgid(2) などを呼び出すことや、set-user-ID や set-group-ID されたプログラムを 実行することで) 資格情報 (credentials) が変更されているプロセスや、 プロセスの実行バイナリの読み出し許可がないプロセスに対して、 コアダンプを生成しない。
1 ("debug") すべてのプロセスで、可能であればコアダンプを行う。 コアダンプファイルの所有者は、ダンプを行うプロセスのファイルシステム UID となり、セキュリティ上の考慮は行われない。 この値は、システムデバッグの場面だけを想定して設けられている。 ptrace のチェックも行われない。
2 ("suidsafe") 通常はダンプされないようなバイナリ (上記の "0" 参照) を root だけが読み出し可能な形でダンプする。 この場合、ユーザはそのコアダンプファイルを削除することはできるが、 読むことはできない。 セキュリティ上の理由から、このモードのコアダンプでは、 既存のダンプファイルや他のファイルを上書きすることはない。 このモードは、管理者が通常の環境で問題を解析しようとする際に 適している。
- このファイルはスーパブロックの値を制御する。
- この値はカーネルがマウントできるファイルシステムの最大値になる。 現在、 super-max で許可されているファイルシステム数以上に マウントする必要がある場合は、この値を増加させるだけでよい。
- /proc/sys/fs/super-nr
- このファイルには現在マウントされているファイルシステム数が書かれている。
- /proc/sys/kernel
- このディレクトリには、以下で説明する様々なカーネルパラメータを 制御するためのファイルが配置されている。
- /proc/sys/kernel/acct
- このファイルには 3 つの値が含まれている: highwater, lowwater, frequency である。 BSD-style process accounting が有効になっている場合、 これら 3 つの値が動作を制御する。 ログファイルのあるファイルシステムの空き領域が lowwater パーセント以下になった場合は、ログ記録を一時停止する。 空き領域が highwater パーセント以上になった場合に、ログ記録を再開する。 frequency はカーネルが空き領域のチェックをする頻度である (単位は秒)。 デフォルトの値は、4, 2, 30 である。 つまり、空き領域が 2% 以下になるとログ記録を一時停止し、 空き領域が 4% 以上となったときに再開する。 空き領域についての情報は 30 秒間有効である点に注意すること。
- /proc/sys/kernel/cap-bound (Linux 2.2 to 2.6.24 以降)
- /proc/sys/kernel/cap-bound このファイルにはカーネルの capability bounding set (符号付き 10 進数表現) の値が書かれている。 execve(2) 中は、このセットとプロセスに許可されている権限の AND がとられる。 Linux 2.6.25 以降では、システム全体のケーパビリティバウンディングセットは なくなり、スレッド単位のバウンディングセットに置き換えられた。 capabilities(7) を参照。
- /proc/sys/kernel/core_pattern
- core(5) 参照。
- /proc/sys/kernel/core_uses_pid
- core(5) 参照。
- /proc/sys/kernel/ctrl-alt-del
- このファイルはキーボードの Ctrl-Alt-Del の扱いを制御する。 このファイルにある値が 0 の場合、 Ctrl-Alt-Del が捕捉されると init(8) プログラムに送られて、正しく再起動される。 値が 0 より大きい場合、Vulcan Nerve Pinch (tm) に反応して、 Linux はダーティバッファを同期させることなく、すぐに再起動を行う。 注意: プログラム (dosemu など) に "raw" モードのキーボードがある場合、 ctrl-alt-del はカーネルの tty レイヤーに到達する前に プログラムに遮断され、 プログラムに送られてどのように扱うかが決められる。
- /proc/sys/kernel/hotplug
- このファイルはホットプラグ・ポリシー・エージェントのパスが書かれている。 このファイルのデフォルト値は /sbin/hotplug である。
- /proc/sys/kernel/domainname と /proc/sys/kernel/hostname
- これらのファイルは、コマンド
domainname(1), hostname(1)
と全く同じ方法で、
マシンの NIS/YP
ドメイン名とホスト名の設定に使える。
すなわち
# echo 'darkstar' > /proc/sys/kernel/hostname # echo 'mydomain' > /proc/sys/kernel/domainname
は、以下と同じ効果がある。
# hostname 'darkstar' # domainname 'mydomain'
注意: 典型的な darkstar.frop.org という名前には、 ホスト名 "darkstar" と DNS (Internet Domain Name Server) ドメイン名 "frop.org" が含まれているが、DNS ドメイン名と NIS (Network Information Service) または YP (Yellow Pages) のドメイン名を混同してはならない。 一般にこれら 2 つのドメイン名は異なる。 詳細な議論は、 hostname(1) の man ページを参照すること。
- /proc/sys/kernel/htab-reclaim
- (PowerPC のみ) このファイルを 0 以外の値に設定すると、 PowerPC htab (カーネルソースファイル Documentation/powerpc/ppc_htab.txt 参照) を、システムがアイドルループになるたびに切り詰める。
- /proc/sys/kernel/l2cr
- (PowerPC のみ) このファイルには G3 プロセッサボードの L2 キャッシュを制御するフラグが含まれる。 0 の場合、キャッシュは無効になる。 0 以外の場合は有効になる。
- /proc/sys/kernel/modprobe
- このファイルには、カーネルモジュールローダへのパスが含まれる。 デフォルトの値は /sbin/modprobe である。このファイルは、 CONFIG_KMOD オプションを有効にしてカーネルが作成されている場合にのみ存在する。 このファイルについては、カーネルソースファイル Documentation/kmod.txt (カーネル 2.4 以前のみに存在) に記述されている。
- /proc/sys/kernel/msgmax
- このファイルは、System V メッセージキューに書き込まれる 1 つのメッセージの 最大バイト数を、システム全体で制限する。
- /proc/sys/kernel/msgmni
- このファイルはメッセージキュー識別子の最大数をシステム全体で制限する。 (このファイルは Linux 2.4 以降にしか存在しない)。
- /proc/sys/kernel/msgmnb
- このファイルは、 msg_qbytes の設定を初期化するシステム全体のパラメータである。 msg_qbytes は以降で作成されるメッセージキューで使われる。 msg_qbytes 設定では、メッセージキューに書き込まれる最大バイト数を指定する。
- /proc/sys/kernel/ostype と /proc/sys/kernel/osrelease
- これらのファイルは文字列 /proc/version の各部分を与える。
- /proc/sys/kernel/overflowgid と /proc/sys/kernel/overflowuid
- これらのファイルは /proc/sys/fs/overflowgid と /proc/sys/fs/overflowuid を複製したものである。
- /proc/sys/kernel/panic
- このファイルはカーネル変数 panic_timeout への読み出しと書き込みのアクセスを与える。 この値が 0 ならば、パニック時にカーネルは (無限) ループに入る。 0 でなければ、その秒数だけ待ってから自動的に再起動する。 ソフトウェア watchdog ドライバを使っている場合、 推奨される設定は 60 である。
- /proc/sys/kernel/panic_on_oops (Linux 2.5.68 以降)
- このファイルは、oops や BUG が起こった場合のカーネルの動作を制御する。 ファイルに 0 が書かれている場合、システムは操作を続行しようとする。 1 が書かれている場合、システムは (klogd が oops 出力を記録する時間を与えるために) 数秒間遅延した後、 panic を起こす。 /proc/sys/kernel/panic ファイルも 0 でない場合、マシンは再起動される。
- /proc/sys/kernel/pid_max (Linux 2.5.34 以降)
- このファイルは、PID をいくつで終了にするかを指定する (すなわち、このファイルの値は最大 PID より 1 大きい)。 このファイルのデフォルト値は 32768 であり、 その場合には以前のカーネルと同じ PID の範囲になる。 32ビットのプラットフォームでは、 pid_max の最大値は 32768 である。 64ビットのプラットフォームでは、 2^22 (PID_MAX_LIMIT, 約 4,000,000) までの任意の値を設定できる。
- /proc/sys/kernel/powersave-nap (PowerPC のみ)
- このファイルにはフラグが書かれている。 フラグが設定されると、Linux-PPC は 省電力の "nap" モードを使う。 設定されない場合は、"doze" モードが使われる。
- /proc/sys/kernel/printk
- このファイルにある 4 つの値は、 console_loglevel, default_message_loglevel, minimum_console_loglevel, default_console_loglevel である。 これらの値はエラーメッセージを表示したり記録したりする printk() の動作に影響する。 各 loglevel の情報については、 syslog(2) を参照すること。 優先度が console_loglevel 以上のメッセージは、コンソールに表示される。 優先度が明示されていないメッセージは、優先度が default_message_level のときに表示される。 minimum_console_loglevel は console_loglevel に設定できる最小 (最高) の値である。 default_console_loglevel は console_loglevel のデフォルトの値である。
- /proc/sys/kernel/pty (Linux 2.6.4 以降)
- このディレクトリは、Unix 98 疑似端末 (pts(4) を参照) の数に関連する 2 つのファイルを含む。
- /proc/sys/kernel/pty/max
- このファイルは疑似端末の最大数を定義する。
- /proc/sys/kernel/pty/nr
- この読み出し専用のファイルは、現在いくつの疑似端末が使われているかを表す。
- /proc/sys/kernel/random
- このディレクトリは、ファイル /dev/random の操作を制御する様々なパラメータが書かれている。 詳細は random(4) を参照。
- /proc/sys/kernel/real-root-dev
- このファイルはカーネルソースファイル Documentation/initrd.txt に記述されている。
- /proc/sys/kernel/reboot-cmd (Sparc のみ)
- このファイルは SPARC ROM/Flash ブートローダに引き数を渡す方法を 提供しているように思われる。 再起動後に何をするかを指定しているのだろうか?
- /proc/sys/kernel/rtsig-max
- (2.6.7 までのカーネルにのみ存在する。 setrlimit(2) を参照すること) このファイルはシステムで発行される POSIX real-time (queued) signal の 最大数を調整するのに使用される。
- /proc/sys/kernel/rtsig-nr
- (2.6.7 までのカーネルにのみ存在する) このファイルは現在キューに入っている POSIX real-time signal の数を表す。
- /proc/sys/kernel/sem (Linux 2.4 以降)
- このファイルには System V IPC セマフォを制限する 4 つの値が書かれている。 これらのフィールドは次の順番に並んでいる:
- /proc/sys/kernel/sg-big-buff
- このファイルは、汎用 SCSI デバイス (sg) のバッファサイズの最大値を表す。 今はこれを変更することはできないが、 コンパイル時に include/scsi/sg.h を編集して SG_BIG_BUFF の値を変えれば変更できる。 ただし、この値を変更する理由はないだろう。
- /proc/sys/kernel/shmall
- このファイルには System V 共有メモリの総ページ数の システム全体での制限が書かれている。
- /proc/sys/kernel/shmmax
- このファイルを通じて、(System V IPC) 共有メモリセグメントを作成するときの 最大サイズの実行時上限 (run-time limit) を取得または設定できる。 現在は 1GB までの共有メモリセグメントが カーネルでサポートされている。 この値のデフォルトは SHMMAX である。
- /proc/sys/kernel/shmmni
- (Linux 2.4 以降で使用可能) このファイルは、システム全体で作成可能な System V 共有メモリセグメント数を指定する。
- /proc/sys/kernel/sysrq
- このファイルは、SysRq
キーにより起動が許可されている関数群を制御する
ものである。デフォルトでは、ファイルの内容は
1 であり、
これは起こり得る全ての
SysRq
リクエストが許可されることを意味する
(古いバージョンのカーネルでは、SysRq
はデフォルトでは無効になっており、
実行時に明示的に有効にする必要があったが、今はそうではない)。
このファイルで指定可能な値は以下の通り。
0 - sysrq を完全に無効にする
1 - sysrq の全ての関数を有効にする
>1 - 許可する sysrq 関数のビットマスク。内訳は以下の通り。
2 - コンソールのログ・レベルの制御を有効にする
4 - キーボードの制御を有効にする (SAK, unraw)
8 - プロセスなどのデバッグ・ダンプを有効にする
16 - sync コマンドを有効にする
32 - 読み出し専用での再マウントを有効にする
64 - プロセスへのシグナル発行を有効にする (term, kill, oom-kill)
128 - リブート/電源オフを許可する
256 - 全てのリアルタイム・タスクの nice 値の変更を許可するカーネル設定オプション CONFIG_MAGIG_SYSRQ が有効な場合のみ、このファイルは存在する。 詳細は、カーネルソースファイル Documentation/sysrq.txt を参照のこと。
- /proc/sys/kernel/version
- このファイルには、以下のような文字列が書かれている:
#5 Wed Feb 25 21:49:24 MET 1998"#5" はこのソースで構築された 5 番目のカーネルであることを意味する。 その後にある日付はカーネルが構築された時刻を表す。
- /proc/sys/kernel/threads-max (Linux 2.3.11 以降)
- このファイルは、システム全体で作成可能なスレッド数 (タスク数) の上限を指定する。
- /proc/sys/kernel/zero-paged (PowerPC のみ)
- このファイルはフラグを含む。 (0 以外の値で) 有効された場合、Linux-PPC はアイドルループで pre-zero page を行うので、get_free_pages の速度が向上する可能性がある。
- /proc/sys/net
- このディレクトリにはネットワーク関係の情報が入っている。 このディレクトリにあるファイルのいくつかについては、 tcp(7) や ip(7) に説明がある。
- /proc/sys/net/core/somaxconn
- このファイルは listen(2) の backlog 引き数の上限値を規定する。 詳細は listen(2) のマニュアルページを参照。
- /proc/sys/proc
- このディレクトリはたぶん空である。
- /proc/sys/sunrpc
- このディレクトリはネットワークファイルシステム (NFS) への Sun remote procedure call (遠隔手続き呼び出し) をサポートする。 これが存在しないシステムもある。
- /proc/sys/vm
- このディレクトリにはメモリ管理の調整、バッファやキャッシュ管理のための ファイルがある。
- /proc/sys/vm/drop_caches (Linux 2.6.16 以降)
- このファイルに書き込みを行うことで、クリーンなキャッシュ、dentry、
inode
をメモリ上から外し、そのメモリを解放する。
ページキャッシュを解放するには、 echo 1 > /proc/sys/vm/drop_caches とする。 dentry、inode を解放するには、 echo 2 > /proc/sys/vm/drop_caches とする。ページキャッシュ、dentry、inode を解放するには、 echo 3 > /proc/sys/vm/drop_caches とする。
この操作は非破壊的な操作で、ダーティな (dirty) オブジェクトは 解放されないので、この操作を行う際は最初に sync(8) を実行しておくべきである。
- /proc/sys/vm/swappiness
- このファイルの値により、カーネルがどの程度激しくメモリページの スワップを行うかが制御される。 大きな値ほどスワップが激しくなり、小さい値ほど激しくなくなる。 デフォルト値は 60 である。
- /proc/sys/vm/legacy_va_layout (Linux 2.6.9 以降)
- 0 以外の場合、新しい 32ビットメモリマッピング配置が無効になり、 カーネルは全てのプロセスに対して従来の (カーネル 2.4 の) 配置方法を 使用する。
- /proc/sys/vm/oom_dump_tasks (Linux 2.6.25 以降)
- カーネルが OOM-killing
を実行する際に、システム全体のタスク・ダンプ
(カーネルスレッドを除く)
を生成するかを制御する。
ダンプには、タスク
(スレッド、プロセス)
毎に以下の情報が出力される:
スレッド
ID、実ユーザ
ID、スレッドグループ
ID (プロセス ID)、
仮想メモリサイズ、Resident
Set Size
(実メモリ上に存在するページサイズ)、
タスクがスケジューリングされた
CPU、 oom_adj スコア (/proc/[pid]/oom_adj
の説明を参照)、コマンド名。
このダンプ情報は、なぜ
OOM-killer
が起動されたかを知り、
その原因となったならず者のタスクを特定するのに役に立つ。
このファイルの内容が値 0 の場合、ダンプ情報の出力は行われない。 タスクが何千もある非常に巨大なシステムでは、 各々のタスクについてメモリ状態をダンプするのは適切でないかもしれない。 そのようなシステムでは、ダンプ情報が必要でもないときに メモリ不足 (OOM) の状況で性能面の不利益が起こらないようにすべきだろう。
このファイルの内容が 0 以外の場合、 OOM-killer が実際にメモリを占有したタスクを kill する度に ダンプ情報が出力される。
デフォルト値は 0 である。
- /proc/sys/vm/oom_kill_allocating_task (Linux 2.6.24 以降)
- このファイルは、メモリ不足
(OOM)
の状況が起こった際に、
メモリ不足のきっかけとなったタスクを
kill
するかどうかを制御する。
このファイルが 0 に設定された場合、 OOM-killer はタスクリスト全体をスキャンし、経験則に基づき kill するタスクを選択する。 通常は、kill した場合に多くのメモリが解放できる、 ならず者のメモリ占有タスクが選択される。
このファイルが 0 以外に設定された場合、 OOM-killer はメモリ不足の状況が発生するきっかけとなったタスクを 単純に kill するだけである。 これにより、たいていは重い処理となるタスクリストのスキャンを回避できる。
/proc/sys/vm/panic_on_oom が 0 以外の場合、 /proc/sys/vm/oom_kill_allocating_task にどのような値が入っていたとしても、 /proc/sys/vm/panic_on_oom の方が優先される。
デフォルト値は 0 である。
- /proc/sys/vm/overcommit_memory
- このファイルにはカーネル仮想メモリのアカウントモードが書かれている。 値は以下の通り:
- 0:
発見的なオーバーコミット
(heuristic overcommit)
(これがデフォルトである)
1: 常にオーバーコミットし、チェックしない。
2: 常にチェックし、オーバーコミットしない。
- モード 0 では、 MAP_NORESERVE を設定して呼び出された mmap(2) はチェックされない。 またデフォルトのチェックはとても脆弱で、 プロセスを "OOM-kill" してしまうリスクを引き起こす。 Linux 2.4 では 0 以外の値はモード 1 を意味する。 (Linux 2.6 以降で利用可能な) モード 2 では、 システム上の仮想アドレス空間の合計が (SS + RAM*(r/100)) に制限されている。 ここで、SS はスワップ空間のサイズ、 RAM は物理メモリのサイズ、r はファイル /proc/sys/vm/overcommit_ratio の内容である。
- /proc/sys/vm/overcommit_ratio
- /proc/sys/vm/overcommit_memory の説明を参照すること。
- /proc/sys/vm/panic_on_oom (Linux 2.6.18 以降)
- このファイルは、メモリ不足時にカーネルパニックを
起こすか起こさないかを制御する。
このファイルに値 0 を設定すると、 カーネルの OOM-killer がならず者のプロセスを kill する。 普通は、OOM-killer がならず者のプロセスを kill することができ、 システムは何とか動き続けることができる。
このファイルに値 1 を設定すると、 メモリ不足の状況が発生すると、カーネルは普通はパニックする。 しかしながら、プロセスが メモリポリシー (mbind(2) の MPOL_BIND) や cpusets (cpuset(7)) を使って特定のノードへのメモリ割り当てを制限していて、 それらのノードでメモリ枯渇状態に至った場合は、 一つのプロセスが OOM-killer により kill されるだけかもしれない。 この場合には、カーネルパニックは発生しない。 なぜなら、他のノードのメモリには空きがあるかもしれず、 したがって、システム全体としてはメモリ不足の状況にまだ達していないかも しれないからである。
このファイルに値 2 を設定すると、 メモリ不足の状況が発生するとカーネルは常にパニックを起こす。
デフォルト値は 0 である。 1 と 2 はクラスタリングのフェイルオーバー用である。 フェイルオーバーの方針に応じてどちらかの値を選択すること。
- /proc/sysrq-trigger (Linux 2.4.21 以降)
- このファイルに文字 character を書き込むと、 キーボードから ALT-SysRq-<character> を入力した場合と 同じ SysRq 関数が起動される (/proc/sys/kernel/sysrq の説明を参照)。 通常、このファイルへ書き込みができるのは root だけである。詳細については、カーネルソースファイルの Documentation/sysrq.txt を参照のこと。
- /proc/sysvipc
- 疑似ファイル msg, sem, shm を含むサブディレクトリ。 これらのファイルは、現在システム上に存在する System V プロセス間通信 (Interprocess Communication, IPC) オブジェクト (それぞれ: メッセージキュー、セマフォ、共有メモリ) のリストであり、 ipcs(1) で取得できる情報と同じものを提供する。 これらのファイルにはヘッダがあり、理解しやすいように (1 行につき 1 個の IPC オブジェクトの形式で) フォーマットされている。 svipc(7) にはこれらのファイルから分かる情報の詳細な背景が書かれている。
- /proc/tty
- 疑似ファイルを含むサブディレクトリ。 tty ドライバとライン設定 (line discipline) の書かれた サブディレクトリも含まれる。
- /proc/uptime
- このファイルは システム起動時から経過した時間 (秒) と アイドル (idle) しているプロセスが消費した時間 (秒) の 2 つの数を含む。
- /proc/version
- 現在稼働しているカーネルのバージョン識別子である文字列。
これには /proc/sys/ostype,
/proc/sys/osrelease, /proc/sys/version
の内容が含まれる。
たとえばこのように:
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
- /proc/vmstat (Linux 2.6 以降)
- このファイルは仮想メモリの様々な統計情報を表示する。
- /proc/zoneinfo (Linux 2.6.13 以降)
- このファイルはメモリのゾーン (memory zone) に関する情報を表示する。 仮想メモリの振舞いを分析するのに役立つ。
注意¶
ほとんどの文字列 (たとえば環境変数やコマンド行) は内部表現のままなので、 各フィールドは NULL バイト ('\0') で区切られている。 だから、od -c や tr "\000" "\n" を使えば、 それらはより読みやすくなる。 また echo `cat <file>` でもよい。
このマニュアルは不完全であり、たぶん不正確で、しばしば更新される必要がある。
関連項目¶
cat(1), find(1), free(1), ps(1),
tr(1), uptime(1), chroot(2), mmap(2),
readlink(2), syslog(2), slabinfo(5), hier(7),
time(7), arp(8), dmesg(8), hdparm(8),
ifconfig(8), init(8), lsmod(8), lspci(8),
mount(8), netstat(8), procinfo(8), route(8)
カーネルのソースファイル:
Documentation/filesystems/proc.txt,
Documentation/sysctl/vm.txt
2009-03-30 | Linux |